<?php



/**
 * Description of word_pinyin
 *
 * @author 林群伟
 */
class Pinyin {

    private static $code = array(array("a", -20319), array("ai", -20317), array("an", -20304), array("ang", -20295), array("ao", -20292), array("ba", -20283), array("bai", -20265),
        array("ban", -20257), array("bang", -20242), array("bao", -20230), array("bei", -20051), array("ben", -20036), array("beng", -20032), array("bi", -20026),
        array("bian", -20002), array("biao", -19990), array("bie", -19986), array("bin", -19982), array("bing", -19976), array("bo", -19805), array("bu", -19784),
        array("ca", -19775), array("cai", -19774), array("can", -19763), array("cang", -19756), array("cao", -19751), array("ce", -19746), array("ceng", -19741),
        array("cha", -19739), array("chai", -19728), array("chan", -19725), array("chang", -19715), array("chao", -19540), array("che", -19531), array("chen", -19525),
        array("cheng", -19515), array("chi", -19500), array("chong", -19484), array("chou", -19479), array("chu", -19467), array("chuai", -19289), array("chuan", -19288),
        array("chuang", -19281), array("chui", -19275), array("chun", -19270), array("chuo", -19263), array("ci", -19261), array("cong", -19249), array("cou", -19243),
        array("cu", -19242), array("cuan", -19238), array("cui", -19235), array("cun", -19227), array("cuo", -19224), array("da", -19218), array("dai", -19212),
        array("dan", -19038), array("dang", -19023), array("dao", -19018), array("de", -19006), array("deng", -19003), array("di", -18996), array("dian", -18977),
        array("diao", -18961), array("die", -18952), array("ding", -18783), array("diu", -18774), array("dong", -18773), array("dou", -18763), array("du", -18756),
        array("duan", -18741), array("dui", -18735), array("dun", -18731), array("duo", -18722), array("e", -18710), array("en", -18697), array("er", -18696), array("fa", -18526),
        array("fan", -18518), array("fang", -18501), array("fei", -18490), array("fen", -18478), array("feng", -18463), array("fo", -18448), array("fou", -18447), array("fu", -18446),
        array("ga", -18239), array("gai", -18237), array("gan", -18231), array("gang", -18220), array("gao", -18211), array("ge", -18201), array("gei", -18184), array("gen", -18183),
        array("geng", -18181), array("gong", -18012), array("gou", -17997), array("gu", -17988), array("gua", -17970), array("guai", -17964), array("guan", -17961),
        array("guang", -17950), array("gui", -17947), array("gun", -17931), array("guo", -17928), array("ha", -17922), array("hai", -17759), array("han", -17752), array("hang", -17733),
        array("hao", -17730), array("he", -17721), array("hei", -17703), array("hen", -17701), array("heng", -17697), array("hong", -17692), array("hou", -17683), array("hu", -17676),
        array("hua", -17496), array("huai", -17487), array("huan", -17482), array("huang", -17468), array("hui", -17454), array("hun", -17433), array("huo", -17427), array("ji", -17417),
        array("jia", -17202), array("jian", -17185), array("jiang", -16983), array("jiao", -16970), array("jie", -16942), array("jin", -16915), array("jing", -16733), array("jiong", -16708),
        array("jiu", -16706), array("ju", -16689), array("juan", -16664), array("jue", -16657), array("jun", -16647), array("ka", -16474), array("kai", -16470), array("kan", -16465),
        array("kang", -16459), array("kao", -16452), array("ke", -16448), array("ken", -16433), array("keng", -16429), array("kong", -16427), array("kou", -16423),
        array("ku", -16419), array("kua", -16412), array("kuai", -16407), array("kuan", -16403), array("kuang", -16401), array("kui", -16393), array("kun", -16220),
        array("kuo", -16216), array("la", -16212), array("lai", -16205), array("lan", -16202), array("lang", -16187), array("lao", -16180), array("le", -16171),
        array("lei", -16169), array("leng", -16158), array("li", -16155), array("lia", -15959), array("lian", -15958), array("liang", -15944), array("liao", -15933),
        array("lie", -15920), array("lin", -15915), array("ling", -15903), array("liu", -15889), array("long", -15878), array("lou", -15707), array("lu", -15701),
        array("lv", -15681), array("luan", -15667), array("lue", -15661), array("lun", -15659), array("luo", -15652), array("ma", -15640), array("mai", -15631),
        array("man", -15625), array("mang", -15454), array("mao", -15448), array("me", -15436), array("mei", -15435), array("men", -15419), array("meng", -15416),
        array("mi", -15408), array("mian", -15394), array("miao", -15385), array("mie", -15377), array("min", -15375), array("ming", -15369), array("miu", -15363),
        array("mo", -15362), array("mou", -15183), array("mu", -15180), array("na", -15165), array("nai", -15158), array("nan", -15153), array("nang", -15150),
        array("nao", -15149), array("ne", -15144), array("nei", -15143), array("nen", -15141), array("neng", -15140), array("ni", -15139), array("nian", -15128),
        array("niang", -15121), array("niao", -15119), array("nie", -15117), array("nin", -15110), array("ning", -15109), array("niu", -14941), array("nong", -14937),
        array("nu", -14933), array("nv", -14930), array("nuan", -14929), array("nue", -14928), array("nuo", -14926), array("o", -14922), array("ou", -14921), array("pa", -14914),
        array("pai", -14908), array("pan", -14902), array("pang", -14894), array("pao", -14889), array("pei", -14882), array("pen", -14873), array("peng", -14871),
        array("pi", -14857), array("pian", -14678), array("piao", -14674), array("pie", -14670), array("pin", -14668), array("ping", -14663), array("po", -14654),
        array("pu", -14645), array("qi", -14630), array("qia", -14594), array("qian", -14429), array("qiang", -14407), array("qiao", -14399), array("qie", -14384),
        array("qin", -14379), array("qing", -14368), array("qiong", -14355), array("qiu", -14353), array("qu", -14345), array("quan", -14170), array("que", -14159),
        array("qun", -14151), array("ran", -14149), array("rang", -14145), array("rao", -14140), array("re", -14137), array("ren", -14135), array("reng", -14125),
        array("ri", -14123), array("rong", -14122), array("rou", -14112), array("ru", -14109), array("ruan", -14099), array("rui", -14097), array("run", -14094),
        array("ruo", -14092), array("sa", -14090), array("sai", -14087), array("san", -14083), array("sang", -13917), array("sao", -13914), array("se", -13910),
        array("sen", -13907), array("seng", -13906), array("sha", -13905), array("shai", -13896), array("shan", -13894), array("shang", -13878), array("shao", -13870),
        array("she", -13859), array("shen", -13847), array("sheng", -13831), array("shi", -13658), array("shou", -13611), array("shu", -13601), array("shua", -13406),
        array("shuai", -13404), array("shuan", -13400), array("shuang", -13398), array("shui", -13395), array("shun", -13391), array("shuo", -13387), array("si", -13383),
        array("song", -13367), array("sou", -13359), array("su", -13356), array("suan", -13343), array("sui", -13340), array("sun", -13329), array("suo", -13326),
        array("ta", -13318), array("tai", -13147), array("tan", -13138), array("tang", -13120), array("tao", -13107), array("te", -13096), array("teng", -13095),
        array("ti", -13091), array("tian", -13076), array("tiao", -13068), array("tie", -13063), array("ting", -13060), array("tong", -12888), array("tou", -12875),
        array("tu", -12871), array("tuan", -12860), array("tui", -12858), array("tun", -12852), array("tuo", -12849), array("wa", -12838), array("wai", -12831),
        array("wan", -12829), array("wang", -12812), array("wei", -12802), array("wen", -12607), array("weng", -12597), array("wo", -12594), array("wu", -12585),
        array("xi", -12556), array("xia", -12359), array("xian", -12346), array("xiang", -12320), array("xiao", -12300), array("xie", -12120), array("xin", -12099),
        array("xing", -12089), array("xiong", -12074), array("xiu", -12067), array("xu", -12058), array("xuan", -12039), array("xue", -11867), array("xun", -11861),
        array("ya", -11847), array("yan", -11831), array("yang", -11798), array("yao", -11781), array("ye", -11604), array("yi", -11589), array("yin", -11536),
        array("ying", -11358), array("yo", -11340), array("yong", -11339), array("you", -11324), array("yu", -11303), array("yuan", -11097), array("yue", -11077),
        array("yun", -11067), array("za", -11055), array("zai", -11052), array("zan", -11045), array("zang", -11041), array("zao", -11038), array("ze", -11024),
        array("zei", -11020), array("zen", -11019), array("zeng", -11018), array("zha", -11014), array("zhai", -10838), array("zhan", -10832), array("zhang", -10815),
        array("zhao", -10800), array("zhe", -10790), array("zhen", -10780), array("zheng", -10764), array("zhi", -10587), array("zhong", -10544), array("zhou", -10533),
        array("zhu", -10519), array("zhua", -10331), array("zhuai", -10329), array("zhuan", -10328), array("zhuang", -10322), array("zhui", -10315), array("zhun", -10309),
        array("zhuo", -10307), array("zi", -10296), array("zong", -10281), array("zou", -10274), array("zu", -10270), array("zuan", -10262), array("zui", -10260),
        array("zun", -10256), array("zuo", -10254)
    );

    private static function codeTo($num) {
        if ($num > 0 & $num < 160) {
            return chr($num);
        } elseif ($num < -20319 || $num > -10247) {
            return "";
        } else {
            for ($i = count(self::$code) - 1; $i >= 0; $i--) {
                if (self::$code[$i][1] <= $num)
                    break;
            }
            return self::$code[$i][0];
        }
    }

    private static function siconv($str, $charset) {
        return @iconv($charset, 'gb2312', $str);
    }

    public static function getPy($str, $charset='utf-8') {
        $string = '';
        $ret1 = '';
        $ret2 = '';
        if ($charset != 'gb2312')
            $str = self::siconv($str, $charset);
        for ($i = 0; $i < strlen($str); $i++) {
            $p = ord(substr($str, $i, 1));
            if ($p > 160) {
                $q = ord(substr($str, ++$i, 1));
                $p = $p * 256 + $q - 65536;
            }
            $string = self::codeTo($p);
            $ret1.=substr($string, 0, 1);
            $ret2.=$string;
        }
        return array($ret2, $ret1);
    }

}

?>
